"""
原始直方图均衡化关注全局，会引入噪声，也会造成部分过度增强（曝光）
对比度受限的直方图均衡化算法：
1. 划分8x8网格，也就是将整个图像划分成64个小格子
2. 每个小格子都计算直方图信息，进行均衡化
3. 为避免
"""

import cv2
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread("../images/zhifangtu.png", cv2.IMREAD_GRAYSCALE)

plt.hist(img.flatten(), bins=255, range=(0, 255), density=True)
plt.show()

# 进行对比度受限的直方图均衡化
CLAHE = cv2.createCLAHE(clipLimit=40, tileGridSize=(8, 8))
img_CLAHE = CLAHE.apply(img)

plt.hist(img_CLAHE.flatten(), bins=255, range=(0, 255), density=True)
plt.show()

img_stack = np.hstack((img, img_CLAHE))
cv2.imshow("CLAHE", img_stack)
cv2.waitKey(0)